package day1903;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;

public class blfs {
    public static void main(String[] args) throws Exception {
        //com1();//暴力获得成员变量
        com2();//暴力反射成员方法
    }

    private static void com2() throws Exception {
        Class a =  shu.class;
        Method[] b = a.getDeclaredMethods();
//        for(Method c:b){
//            System.out.println(c.getName());
////            Class[] d = c.getParameterTypes();
////            System.out.println(Arrays.toString(d));
//        }

        //暴力获得某个方法
        Method h = a.getDeclaredMethod("namess", String.class);//(m,n)是方法名，n是参数列表的class对象
        Class[] d = h.getParameterTypes();
        System.out.println(Arrays.toString(d));
        //执行私有方法
        Object obb = a.newInstance();
        h.setAccessible(true);
        h.invoke(obb,"aaaaa");
    }

    private static void com1() throws Exception {
        Class a = shu.class;
        Field[] fs = a.getDeclaredFields();//同时获得私有和非私有对象//获取所有的成员变量
        for(Field x:fs){
            System.out.println(x.getName());
        }
        //获取1个成员变量
        Field ss = a.getDeclaredField("name");
        System.out.println(ss.getType().getName());
        //给私有属性设置值set(m,n)---m那个对象，n具体的值
        Object ob = a.newInstance();
        ss.setAccessible(true);//开启对私有数据的操作权限，不做的话会报错
        ss.set(ob,"123");
        //获取私有属性值
        System.out.println(ss.get(ob));//读取属性值
    }
}
